package message

import "github.com/bytedance/sonic"

type Level string

const (
	LevelCritical Level = "critical" // 重要警告, 在静音模式下也会响铃
	// LevelActive              = "active"        // 默认值，系统会立即亮屏显示通知
	// LevelTimeSensitive       = "timeSensitive" // 时效性通知，可在专注状态下显示通知。
	// LeveLPassive             = "passive"       // 仅将通知添加到通知列表，不会亮屏提醒。
)

type Message struct {
	Key           string
	Expire        int64    // 有效时间，单位秒，默认 360 秒
	Title         string   `json:"title"`                   // 推送标题
	Subtitle      string   `json:"subtitle"`                // 推送副标题
	Body          string   `json:"body,omitempty"`          // 推送内容
	DeviceKey     string   `json:"device_key,omitempty"`    // 设备key
	DeviceKeys    []string `json:"device_keys,omitempty"`   // key 数组，用于批量推送
	Level         Level    `json:"level,omitempty"`         // 推送中断级别
	Critical      bool     `json:"critical,omitempty"`      // 重要警告
	Active        bool     `json:"active,omitempty"`        // 默认值，系统会立即亮屏显示通知
	TimeSensitive bool     `json:"timeSensitive,omitempty"` // 时效性通知
	Passive       bool     `json:"passive,omitempty"`       // 仅将通知添加到通知列表，不会亮屏提醒
	Volume        int      `json:"volume,omitempty"`        // 重要警告的通知音量
	Badge         int      `json:"badge,omitempty"`         // 推送角标
	Call          bool     `json:"call,omitempty"`          // 通知铃声重复播放
	AutoCopy      bool     `json:"autoCopy,omitempty"`      // iOS14.5以下自动复制推送内容，iOS14.5以上需手动长按推送或下拉推送
	Copy          string   `json:"copy,omitempty"`          // 复制推送时，指定复制的内容，不传此参数将复制整个推送内容。
	Sound         string   `json:"sound,omitempty"`         // 可以为推送设置不同的铃声
	Icon          string   `json:"icon,omitempty"`          // 为推送设置自定义图标，设置的图标将替换默认Bark图标。
	Group         string   `json:"group,omitempty"`         // 对消息进行分组，推送将按group分组显示在通知中心中。
	Ciphertext    string   `json:"ciphertext,omitempty"`    // 加密推送的密文
	IsArchive     bool     `json:"isArchive,omitempty"`     // 传 1 保存推送，传其他的不保存推送，不传按APP内设置来决定是否保存。
	Url           string   `json:"url,omitempty"`           // 点击推送时，跳转的URL ，支持URL Scheme 和 Universal Link
	Action        string   `json:"action,omitempty"`        // 传 "none" 时，点击推送不会弹窗
	Source        string   `json:"source,omitempty"`        // 推送来源
}

func (m *Message) Marshal() []byte {
	buf, _ := sonic.Marshal(m)
	return buf
}
